Portée des variables
IVariable locale
-
Créer un fichier test_variables.py dans lequel nous allons pouvoir tester la portée de variables.
-
Tapez et exécutez le code suivant :
def ma_fonction (a):Que remarque t'on pour a et b ?
b=a+2
print ("variables dans la fonction : %i, %i" %(a,b))
print ([a,b])
ma_fonction (12)
print ("variables hors de la fonction : %i, %i" %(a,b)) -
Modifiez le programme en ajoutant avant la fonction la ligne suivante :
a,b = 100,1000Que remarque t'on pour a et b ?Un peu plus subtil : enlever l'argument à la fonction et affecter 12 à a dans la fonction. Le programme doit ressembler à ceci :
a,b=100,1000Que remarque t'on ?
def ma_fonction ():
a=12
b=a+2
print ("variables dans la fonction : %i, %i" %(a,b))
print ([a,b])
ma_fonction (12)
print ("variables hors de la fonction : %i, %i" %(a,b))
- Les variables a et b sont locales : n'ayant été déclarées qu'à l'intérieur de la fonction, elles n'existent pas en dehors.
- Si a et b sont déclarés à l'extérieur de la fonction, leur utilisation comme comme variable locale ne modifie pas leur valeur en dehors. Leurs valeurs ont été sauvegardées.
- Une variable définie en dehors de la fonction continue d'exister à l'intérieur de celle-ci. Par contre aucune modification n'est prise en compte.
IIVariable globale
Nous avons vu dans la partie précédente qu'une variable initialisée à l'extérieur d'une fonction est toujours utilisable, mais non modifiable à l'intérieur d'une fonction. C'est un parti pris de Python, quand il ne trouve de variable dans l'espace local de la fonction, il va la chercher en dehors, sans modification autorisée.
Pour préciser à Python qu'une variable a est globale, il faut le préciser à l'intérieur de la fonction qui l'utilise en ajoutant la ligne global a .
Reprenez le programme précédent et modifiez le pour que la variable a soit globale pour la fonction ma_fonction () .
def ma_fonction ():
global a
a=12
b=a+2
print ("variables dans la fonction : %i, %i" %(a,b))
print ([a,b])
ma_fonction (12)
print ("variables hors de la fonction : %i, %i" %(a,b))
IIIRéférence
En Python, les variables ne "contiennent" par vraiment les valeurs qu'on leur affecte. En réalité, elle pointent vers une référence de la valeur.
Une référence est une adresse mémoire permettant à Python de retrouver une valeur mise en mémoire.
- a=1
- b=a
- id (a)==id (b)
- a=2
- b
- id (a)==id (b)
- L1=[1,2,3]
- L2=L1
- L1[0]=9999
- L1
- L2
-
Nous allons reprendre et modifier le fichier test_variables.py pour tester la portée de variables de type liste.
-
Tapez et exécutez le code suivant :
L=[1,2,3] def ma_fonction (L):Que remarque t'on ?
L=[4,5]
print (L)
ma_fonction (L)
print (L) -
Cette fois, dans la fonction, nous n'allons pas affecter une nouvelle valeur à la liste L , mais la modifier.
L=[1,2,3] def ma_fonction (L):Que remarque t'on ? La variable L est-elle globale ?
L[0]=9999
del (L[1])
print (L)
ma_fonction (L)
print (L)
- Il n'y a aucune différence avec le cas précédent : la liste n'est pas traité différemment d'une variable numérique : affecter une nouvelle valeur dans l'espace local à la fonction n'a pas d'incidence sur la valeur de L dans l'espace global.
- La différence peut sembler subtile : nous n'avons pas affecté une nouvelle valeur à L dans la fonction, mais effectué des modifications sur ses sous-éléments. Ceux-ci sont donc modifiés, mais pas la référence de L .